前言
这里记录的都是和处理边界情况有关的功能,即一些需要对 Vue 的规则做一些小调整的特殊情况。不过注意这些功能都是有劣势或危险的场景的。我们会在每个案例中注明,所以当你使用每个功能的时候请稍加留意。
强制更新
如果你发现自己需要在 Vue 中强制更新,在 99.99%的情况下,你在某个地方犯了错误。例如,你可能依赖于 Vue 响应性系统未跟踪的状态,比如在组件创建之后添加了 data
属性。
但是,如果你已经排除了上述情况,并且发现自己处于这种非常罕见的情况下,必须手动强制更新,那么你可以使用 $forceUpdate
用法:迫使组件实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。
有时候会碰到属性无法更新的情况,解决的办法一般有两个:
1 | // 情景:修改 this.userInfo.name='小红' 无效 |
低级静态组件与 v-once
在 Vue 中渲染纯 HTML 元素的速度非常快,但有时你可能有一个包含很多静态内容的组件。在这些情况下,可以通过向根元素添加 v-once
指令来确保只对其求值一次,然后进行缓存,如下所示:
1 | app.component('terms-of-service', { |
再次提醒,不要过度使用这种模式。虽然在极少数情况下需要渲染大量静态内容时很方便,但除非你注意到渲染速度——慢,否则就没有必要这样做—另外,这可能会在以后引起很多混乱。例如,假设另一个开发人员不熟悉
v-once
或者只是在模板中遗漏了它。他们可能会花上几个小时来弄清楚为什么模板没有正确更新。